#ifndef HTTP_RESPONSE_H
#define HTTP_RESPONSE_H

#include <string>
#include <unordered_map>

namespace http {

/**
 * @brief HTTP响应封装类
 * 存储HTTP响应的状态码、头部字段、响应体等信息
 * 提供设置响应内容、重定向等功能
 */
class HttpResponse 
{
public:
    int _statu;                                             // 响应状态码
    bool _redirectFlag;                                     // 是否为重定向响应
    std::string _body;                                      // 响应体内容
    std::string _redirectUrl;                               // 重定向URL
    std::unordered_map<std::string, std::string> _headers;  // 响应头部

public:
    /**
     * @brief 默认构造函数，初始化状态码为200
     */
    HttpResponse();                                        
    /**
     * @brief 带状态码的构造函数
     * @param statu HTTP状态码
     */
    HttpResponse(int statu);                               

    /**
     * @brief 重置响应对象，恢复默认状态
     */
    void reSet();

    /**
     * @brief 设置响应头部字段
     * @param key 字段名
     * @param val 字段值
     */
    void setHeader(const std::string &key, const std::string &val)
    { _headers[key] = val; }

    /**
     * @brief 检查是否存在指定头部字段
     * @param key 字段名
     * @return 存在返回true，否则false
     */
    bool hasHeader(const std::string &key) const
    { return _headers.count(key); }

    /**
     * @brief 获取指定头部字段的值
     * @param key 字段名
     * @return 字段值（不存在时返回空字符串）
     */
    std::string getHeader(const std::string &key) const
    {
        auto it = _headers.find(key);
        return it != _headers.end() ? it->second : "";
    }

    /**
     * @brief 设置响应内容及Content-Type
     * @param body 响应体内容
     * @param type 内容类型（默认:text/html）
     */
    void setContent(const std::string &body, const std::string &type = "text/html");

    /**
     * @brief 设置重定向响应
     * @param url 重定向目标URL
     * @param statu 重定向状态码（默认:302）
     */
    void setRedirect(const std::string &url, int statu = 302);

    /**
     * @brief 判断连接是否需要关闭
     * @return 需要关闭返回true，否则false
     */
    bool close() const 
    { return !hasHeader("Connection") || getHeader("Connection") == "close"; }
};

} // namespace http

#endif // HTTP_RESPONSE_H